﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InterfazConsultas;
using ConsultasEjemploCarreraCaballos.Interfaz;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
using System.Data.Common;

namespace ConsultasEjemploCarreraCaballos.Dominio
{
    public class ConsultasCarreraCaballos:IConsulta
    {
        private GUIConsultas FormConsulta;

        private string Nombre = "Carrera de Caballos";

        private DbCommand DbComm;

        string[] DiasSemana = new string[] {"Vacio","Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"};

        public ConsultasCarreraCaballos() 
        {
            this.FormConsulta = new GUIConsultas();
        }

        public Form CargarFormulario()
        {
            return this.FormConsulta;
        }

        public void EjecutarConsulta()
        {
            DbComm = OpenDB();
            DataTable TblDatos = new DataTable("Consultas");
            DataColumn ColumnaNumero;
            ColumnaNumero = new DataColumn();
            ColumnaNumero.ColumnName = "Dia";
            TblDatos.Columns.Add(ColumnaNumero);

            DataColumn ColumnaCantidad;
            ColumnaCantidad = new DataColumn();
            ColumnaCantidad.ColumnName = "Cantidad";
            TblDatos.Columns.Add(ColumnaCantidad);

            string FechaInicial = this.FormConsulta.DevolverFechaInicio().ToShortDateString();
            string FechaFinal = this.FormConsulta.DevolverFechaFin().ToShortDateString();

            string sentencia = "select count(Fecha) as Cantidad,DatePart(weekday,Fecha) as Dia from Apuestas where Juego IN (Select IdJuego from Juegos where Descripcion = 'JuegoCarreraCaballos') AND Fecha between convert(datetime, " + "'" + FechaInicial + "'" + " , 103) AND convert(datetime, " + "'" + FechaFinal + "'" + " ,103) group by Fecha order by Dia";

            DbComm.CommandText = sentencia;
            DbComm.CommandType = CommandType.Text;

            DbDataReader reader = DbComm.ExecuteReader();

            while (reader.Read())
            {
                DataRow Fila = TblDatos.NewRow();

                int dia = (int)reader[1];

                Fila["Dia"] = DiasSemana[dia];
                Fila["Cantidad"] = reader[0];

                TblDatos.Rows.Add(Fila);
            }

            reader.Close();
                        
            FormConsulta.CargarDataGrid(TblDatos);
        }

        private DbCommand OpenDB()
        {
            DbConnection connR = new SqlConnection("server=localhost; database = Agencia; Trusted_Connection=true");           
            DbCommand objConn = connR.CreateCommand();
            connR.Open();
            return objConn;
        }

        private void CloseBD(SqlConnection BD)
        {
            BD.Close();
        }

        public string GetNombre() 
        {
            return this.Nombre;
        }
    }
    
}
